package com.yao.sort;

/**
 * 选择排序，改进冒泡排序
 * 时间复杂度：O(n^2)
 *
 * @author yaoym
 *
 */
public class SelectDemo {

	/**
	 * 选择排序
	 * 1.选择数组最小的数放在第一位
	 * 2.选择数组最小的数放在第二位
	 * 3.循环到最后两位数
	 * @param arr
	 * @param up
	 */
	public static void sort(Integer[] arr, boolean up) {
		for (int i = 0; i < arr.length; i++) {
			//记录当前数组遍历索引
			int index = i;
			//记录数组最小值索引
			for (int j = index + 1; j < arr.length; j++) {
				if (up ? arr[j] < arr[index] : arr[j] > arr[index]) {
					index = j;
				}
			}

			// 如果当前位置和计算出最值的位置不是同一个位置（即不是本身），则交换
			if (i != index) {
				int tmp = arr[i];
				arr[i] = arr[index];
				arr[index] = tmp;
			}
		}

	}

	public static void main(String[] args) {
		Integer[] arr = InitData.sortData(10);

		System.out.println("--选择排序前--");
		for (int i : arr) {
			System.out.print(i + "\t");
		}
		System.out.println();

		sort(arr, false);

		System.out.println("--选择排序后--");
		for (int i : arr) {
			System.out.print(i + "\t");
		}
	}
}
